package br.edu.ifrn.mb;

import java.util.List;

import javax.faces.event.ActionEvent;

import br.edu.ifrn.dao.AlunoDAO;
import br.edu.ifrn.dao.InstrumentoConclusaoDAO;
import br.edu.ifrn.dao.TipoInstrumentoConclusaoDAO;
import br.edu.ifrn.dao.UsuarioDAO;
import br.edu.ifrn.dominio.Aluno;
import br.edu.ifrn.dominio.InstrumentoConclusao;
import br.edu.ifrn.dominio.Perfil;
import br.edu.ifrn.dominio.TipoInstrumentoConclusao;
import br.edu.ifrn.dominio.Usuario;
import br.edu.ifrn.exception.NegocioException;
import br.edu.ifrn.generic.GenericDAO;
import br.edu.ifrn.mb.generic.GenericCrudMB;
import br.edu.ifrn.util.FacesUtil;

public class ManageInstrumentoConclusao extends GenericCrudMB<InstrumentoConclusao> {
	private String matriculaNomeAluno;
	private String matriculaNomeAlunoPesquisa;
	private String nomeOrientador;
	private String nomeOrientadorPesquisa;
	private List<Aluno> alunos;
	private List<Usuario> orientadores;
	
	public ManageInstrumentoConclusao() {
		super();
		this.exibirTodosRegistrosAoPesquisar = false;
	}
	
	@Override
	protected GenericDAO<InstrumentoConclusao> getDao() {
		return new InstrumentoConclusaoDAO();		
	}

	@Override
	public String getTitulo() {
		return "Instrumento de Conclusão";
	}
	
	public List<TipoInstrumentoConclusao> getTiposInstrumentoConclusao(){
		try {
			return new TipoInstrumentoConclusaoDAO().consultarTodos();
		} catch (NegocioException e) {
			FacesUtil.adicionarMensagemErro("Não foi possível recuperar os tipos de instrumento de conclusão.");
			e.printStackTrace();
			return null;
		}
	}
	public void filtrarAlunos(ActionEvent evt) throws NegocioException {
		if (FacesUtil.getSessionUser().getUsuario().isDiretor()) {
			this.setAlunos(new AlunoDAO().consultarTodos(" WHERE (UPPER(aluno.matricula) LIKE '%"+this.getMatriculaNomeAluno().toUpperCase()+"%' OR UPPER(aluno.nome) LIKE '%"+this.getMatriculaNomeAluno().toUpperCase()+"%') AND aluno.curso.diretoria.id = "+FacesUtil.getSessionUser().getDiretoria().getId(), ""));
		}else if (FacesUtil.getSessionUser().getUsuario().isCoordenador()){
			this.setAlunos(new AlunoDAO().consultarTodos(" WHERE (UPPER(aluno.matricula) LIKE '%"+this.getMatriculaNomeAluno().toUpperCase()+"%' OR UPPER(aluno.nome) LIKE '%"+this.getMatriculaNomeAluno().toUpperCase()+"%') AND aluno.curso.diretoria.id = "+FacesUtil.getSessionUser().getDiretoria().getId()+"" +
					" AND aluno.curso.coordenador.id = "+FacesUtil.getSessionUser().getUsuario().getId(), ""));
		}
	}
	public void filtrarOrientadores(ActionEvent evt) throws NegocioException {
		this.orientadores = new UsuarioDAO().recuperarPorPerfilFiltrados(Perfil.Coordenador, Perfil.Professor, FacesUtil.getSessionUser().getDiretoria(), this.nomeOrientador);
	}
	
	
	public void doNothing(ActionEvent evt){
	}

	public void setMatriculaNomeAluno(String matriculaNomeAluno) {
		this.matriculaNomeAluno = matriculaNomeAluno;
	}

	public String getMatriculaNomeAluno() {
		return matriculaNomeAluno;
	}

	public void setAlunos(List<Aluno> alunos) {
		this.alunos = alunos;
	}

	public List<Aluno> getAlunos() {
		return alunos;
	}

	public void setNomeOrientador(String nomeOrientador) {
		this.nomeOrientador = nomeOrientador;
	}

	public String getNomeOrientador() {
		return nomeOrientador;
	}

	public void setOrientadores(List<Usuario> orientadores) {
		this.orientadores = orientadores;
	}

	public List<Usuario> getOrientadores() {
		return orientadores;
	}

	public void setMatriculaNomeAlunoPesquisa(String matriculaNomeAlunoPesquisa) {
		this.matriculaNomeAlunoPesquisa = matriculaNomeAlunoPesquisa;
	}

	public String getMatriculaNomeAlunoPesquisa() {
		return matriculaNomeAlunoPesquisa;
	}

	public void setNomeOrientadorPesquisa(String nomeOrientadorPesquisa) {
		this.nomeOrientadorPesquisa = nomeOrientadorPesquisa;
	}

	public String getNomeOrientadorPesquisa() {
		return nomeOrientadorPesquisa;
	}
	
	public String pesquisarTodosCurso() throws NegocioException{
		this.dadosPesquisa = this.getDao().consultarTodos(" WHERE instrumentoConclusao.aluno.curso.coordenador.id  = "+FacesUtil.getSessionUser().getUsuario().getId(), "");
		return getPaginaPesquisa();
	}
	
	public String pesquisarTodosDiretoria() throws NegocioException{
		this.dadosPesquisa = this.getDao().consultarTodos(" WHERE instrumentoConclusao.aluno.curso.diretoria.id  = "+FacesUtil.getSessionUser().getDiretoria().getId(), "");
		return getPaginaPesquisa();
	}
	public void filtrar() throws NegocioException {
		if (FacesUtil.getSessionUser().getUsuario().isDiretor()) {
			this.dadosPesquisa = this.getDao().consultarTodos(" WHERE (UPPER(instrumentoConclusao.aluno.matricula) LIKE '%"+this.getMatriculaNomeAlunoPesquisa().toUpperCase()+"%' OR UPPER(instrumentoConclusao.aluno.nome) LIKE '%"+this.getMatriculaNomeAlunoPesquisa().toUpperCase()+"%' AND " +
					" UPPER(instrumentoConclusao.orientador.nome) LIKE '%"+this.getNomeOrientadorPesquisa().toUpperCase()+"%' ) AND instrumentoConclusao.aluno.curso.diretoria.id = "+FacesUtil.getSessionUser().getDiretoria().getId(), "");
		}else if (FacesUtil.getSessionUser().getUsuario().isCoordenador()){
			this.dadosPesquisa = this.getDao().consultarTodos(" WHERE (UPPER(instrumentoConclusao.aluno.matricula) LIKE '%"+this.getMatriculaNomeAlunoPesquisa().toUpperCase()+"%' OR UPPER(instrumentoConclusao.aluno.nome) LIKE '%"+this.getMatriculaNomeAlunoPesquisa().toUpperCase()+"%' AND " +
					" UPPER(instrumentoConclusao.orientador.nome) LIKE '%"+this.getNomeOrientadorPesquisa().toUpperCase()+"%' )  AND instrumentoConclusao.aluno.curso.coordenador.id = "+FacesUtil.getSessionUser().getUsuario().getId(), "");
		}
	}
}
